using LSI - GSI
Introduction
using
method allows you to perform query / scan request on LSI and GSI.
execute
using
takes 1 index/table name and returns on object containing query
and scan
methods.
index/table name must be defined in Schema under LSI / GSI.
Condition expression and Select depends on index / table projected value.
const res = await User.using("group-index").query(
{
groupId: "group-1",
age: {
$gt: 21,
},
},
{
Limit: 5,
}
);
options
options
is an object which accepts QueryCommandInput
/ ScanCommandInput
options and DynamoQL specific options.
exec
exec
boolean directive to execute or not the actual request.
When false
update will return QueryCommandInput
/ ScanCommandInput
object.
import type { QueryCommandInput } from "@aws-sdk/client-dynamodb";
const cmd: QueryCommandInput = await User.using("group-index").query(
{
groupId: "group-1",
age: {
$gt: 21,
},
},
{ exec: false }
);
Select
Select
accepts an array of projected attributes and produces a ProjectionExpression
, "ALL"
| "KEYS"
"COUNT"
.
await User.using("group-index").query(
{
groupId: "group-1",
},
{ Select: ["id", "isActive"] }
);
Select
affects returned Items
type.
const { Items } = await User.using("group-index").query(
{
groupId: "group-1",
},
{ Select: ["id", "isActive"] }
);
Items[0]?.firstname; // Property 'firstname' does not exist on type { id: string; isActive?:boolean } ...
getterInfo
getterInfo
allows you to pass any value to your Schema get function's third argument.
const res = await User.using("group-index").query(
{
groupId: "group-1",
age: {
$gt: 21,
},
},
{ getterInfo: { forFrontend: true } }
);